home *** CD-ROM | disk | FTP | other *** search
/ The Atari Compendium / The Atari Compendium (Toad Computers) (1994).iso / files / prgtools / gnustuff / tos / progut~1 / proff.zoo / stack.c < prev   
Encoding:
C/C++ Source or Header  |  1989-07-04  |  1.9 KB  |  117 lines

  1. #include <stdio.h>
  2. #include "proff.h"
  3.  
  4. struct _proffitem {
  5.         int    Xinval;
  6.         int    Xrmval;
  7.         int    Xoffset;
  8.         int    Xlsval;
  9.         int    Xplval;
  10.         int    Xm1val;
  11.         int    Xm2val;
  12.         int    Xm3val;
  13.         int    Xm4val;
  14.         int    Xfill;
  15.         int    Xrjust;
  16.  
  17.         char    Xcchar;
  18.         char    Xgenesc;
  19.         char    Xroman;
  20.         char    Xbolding;
  21.         char    Xpaging;
  22.         char    Xautopar;
  23.  
  24.         struct     _proffitem *prev;
  25. };
  26.  
  27. static struct
  28. _proffitem *head = NULL;
  29. static struct
  30. _proffitem *top  = NULL;
  31.  
  32.  
  33. char *pusherr = "save: stack overflow.\n";
  34. char *poperr  = "restore: stack underflow.\n";
  35.  
  36. /*
  37.  * save - save proff parameters
  38.  *
  39.  */
  40. save()
  41. {
  42.     struct _proffitem *sp;
  43. #ifdef __GNUC__
  44.     void *malloc(size_t);
  45. #else
  46.     char *malloc();
  47. #endif
  48.  
  49.     if ((sp = (struct _proffitem *) malloc((size_t)sizeof(*sp))) == NULL) {
  50.         fprintf(stderr,pusherr);
  51.         return(FALSE);
  52.     }
  53.     else {
  54.         p_memoryus += sizeof(struct _proffitem);
  55.         if (head == NULL) {    /* first element in stack */
  56.             head = sp;
  57.             top = NULL;    
  58.         }
  59.         
  60.         sp->Xinval = inval;
  61.         sp->Xrmval = rmval;
  62.         sp->Xoffset= offset;
  63.         sp->Xlsval = lsval;
  64.         sp->Xplval = plval;
  65.         sp->Xm1val = m1val;
  66.         sp->Xm2val = m2val;
  67.         sp->Xm3val = m3val;
  68.         sp->Xm4val = m4val;
  69.         sp->Xfill  = fill;
  70.         sp->Xrjust = rjust;
  71.         sp->Xcchar = cchar;
  72.         sp->Xgenesc= genesc;
  73.         sp->Xroman = roman;
  74.         sp->Xbolding = bolding;
  75.         sp->Xpaging = paging;
  76.         sp->Xautopar = autopar;
  77.  
  78.         sp->prev = top;
  79.         top = sp;
  80.     }
  81.     return(TRUE);
  82. }
  83.  
  84. restore()
  85. {
  86.     struct _proffitem *sp;
  87.  
  88.     if (top != NULL) {
  89.  
  90.         inval = top->Xinval;
  91.         rmval = top->Xrmval;
  92.         offset= top->Xoffset;
  93.         lsval = top->Xlsval;
  94.         plval = top->Xplval;
  95.         m1val = top->Xm1val;
  96.         m2val = top->Xm2val;
  97.         m3val = top->Xm3val;
  98.         m4val = top->Xm4val;
  99.         fill  = top->Xfill;
  100.         rjust = top->Xrjust;
  101.         cchar = top->Xcchar;
  102.         genesc= top->Xgenesc;
  103.         roman = top->Xroman;
  104.         bolding = top->Xbolding;
  105.         paging = top->Xpaging;
  106.         autopar = top->Xautopar;
  107.  
  108.         sp = top->prev;
  109.         free(top);
  110.         p_memoryus -= sizeof(struct _proffitem);
  111.         if ((top = sp) == NULL)
  112.             head = NULL;
  113.     }
  114.     else
  115.         fprintf(stderr,poperr);
  116. }
  117.